home *** CD-ROM | disk | FTP | other *** search
/ Night Owl 6 / Night Owl's Shareware - PDSI-006 - Night Owl Corp (1990).iso / 037a / wedits22.zip / WWIVOUTP.PAS < prev   
Pascal/Delphi Source File  |  1991-08-15  |  6KB  |  289 lines

  1. UNIT WWIVOutp;
  2. {$D-}
  3. {{$DEFINE b1200}
  4. INTERFACE
  5.  
  6. CONST
  7.   Black        = 0;
  8.   Blue         = 1;
  9.   Green        = 2;
  10.   Cyan         = 3;
  11.   Red          = 4;
  12.   Magenta      = 5;
  13.   Brown        = 6;
  14.   LightGray    = 7;
  15.   DarkGray     = 8;
  16.   LightBlue    = 9;
  17.   LightGreen   = 10;
  18.   LightCyan    = 11;
  19.   LightRed     = 12;
  20.   LightMagenta = 13;
  21.   Yellow       = 14;
  22.   White        = 15;
  23.   Blink        = 128;
  24.   C0 = ^C'0';
  25.   C1 = ^C'1';
  26.   C2 = ^C'2';
  27.   C3 = ^C'3';
  28.   C4 = ^C'4';
  29.   C5 = ^C'5';
  30.   C6 = ^C'6';
  31.   C7 = ^C'7';
  32.  
  33. PROCEDURE GotoXY(x,y:integer);
  34. PROCEDURE ClrScr;
  35. PROCEDURE ClrEol;
  36. PROCEDURE TextColor(n:integer);
  37. PROCEDURE TextBackground(n:integer);
  38. PROCEDURE Print(s:string);
  39. PROCEDURE Prompt(s:string);
  40. FUNCTION  WhereX : byte;
  41. FUNCTION  WhereY : byte;
  42.  
  43. IMPLEMENTATION
  44.  
  45. USES CRT, DOS;
  46.  
  47. TYPE
  48.   Translation = (None, Bios, DirectVideo, ANSI);
  49.  
  50. VAR
  51.   OldOutput : text;
  52.   Translate : Translation;
  53.   CenterString : string;
  54.   ESCString : string;
  55.  
  56.  
  57. FUNCTION  WhereX : byte;
  58. BEGIN
  59.   WhereX:=Crt.WhereX;
  60. END;
  61.  
  62.  
  63. FUNCTION  WhereY : byte;
  64. BEGIN
  65.   WhereY:=Crt.WhereY;
  66. END;
  67.  
  68. PROCEDURE Print(s:string);
  69. BEGIN
  70.   writeln(s);
  71. END;
  72.  
  73. PROCEDURE Prompt(s:string);
  74. BEGIN
  75.   write(s);
  76. END;
  77.  
  78. PROCEDURE TextColor;
  79. BEGIN
  80.   Crt.Textcolor(n);
  81. END;
  82.  
  83. PROCEDURE TextBackground;
  84. BEGIN
  85.   Crt.textbackground(n);
  86. END;
  87.  
  88. PROCEDURE GotoXY(x,y:integer);
  89. BEGIN
  90.   Crt.gotoxy(x,y);
  91. {$IFDEF b1200}
  92.   delay(8*12);
  93. {$ENDIF}
  94. {$IFDEF b2400}
  95.   delay(8*6);
  96. {$ENDIF}
  97. END;
  98.  
  99. PROCEDURE ClrScr;
  100. BEGIN
  101. {$IFDEF b1200}
  102.   delay(4*12);
  103. {$ENDIF}
  104. {$IFDEF b2400}
  105.   delay(4*6);
  106. {$ENDIF}
  107.   Crt.ClrScr
  108. END;
  109.  
  110. PROCEDURE ClrEol;
  111. BEGIN
  112. {$IFDEF b1200}
  113.   delay(4*12);
  114. {$ENDIF}
  115. {$IFDEF b2400}
  116.   delay(4*6);
  117. {$ENDIF}
  118.  
  119.   Crt.ClrEol
  120. END;
  121.  
  122.  
  123. PROCEDURE Color(f,b:byte);
  124. BEGIN
  125.   TextColor(f);
  126.   TextBackground(b);
  127. END;
  128.  
  129.  
  130. PROCEDURE DoColor(ch:char);
  131. BEGIN
  132. {$IFDEF b1200}
  133.   delay(12);
  134. {$ENDIF}
  135. {$IFDEF b2400}
  136.   delay(6);
  137. {$ENDIF}
  138.   CASE ch OF
  139.     '0' : Color(LightGray,Black);
  140.     '1' : Color(LightCyan,Black);
  141.     '2' : Color(Yellow,Black);
  142.     '3' : Color(Magenta,Black);
  143.     '4' : Color(White,Blue);
  144.     '5' : Color(Green,Black);
  145.     '6' : Color(Red+Blink,Black);
  146.     '7' : Color(LightBlue,Black);
  147.     ELSE  Color(LightGray,Black);
  148.   END;
  149. END;
  150.  
  151. PROCEDURE Center(VAR s:string);
  152. VAR
  153.   i,l : integer;
  154. BEGIN
  155.   l:=0;
  156.   FOR i:=1 TO length(s) DO
  157.   BEGIN
  158.     inc(l);
  159.     IF s[i]=^C THEN dec(l,2);
  160.   END;
  161.   FOR i:=1 TO 40-(l div 2) DO
  162.     write(OldOutput,' ');
  163.   WHILE s<>'' DO
  164.     IF s[1]<>^C THEN
  165.     BEGIN
  166.       write(OldOutput,s[1]);
  167.       delete(s,1,1);
  168.     END
  169.     ELSE BEGIN
  170.       DoColor(s[2]);
  171.       delete(s,1,2);
  172.     END;
  173. END;
  174.  
  175. {$F+}
  176. FUNCTION DoNothing(VAR f:TextRec):integer;
  177. BEGIN
  178.   DoNothing :=0;
  179. END;
  180.  
  181. FUNCTION TranslateOutput(VAR f:TextRec):integer;
  182. VAR
  183.   i:integer;
  184.   ch : char;
  185.   p : integer;
  186.   x, y, e : integer;
  187. BEGIN
  188.   WITH f DO
  189.     FOR i:=0 TO BufPos-1 DO
  190.     BEGIN
  191.       ch :=BufPtr^[i];
  192.       CASE UserData[1] OF
  193.         0 : BEGIN
  194.               IF Translate <> None THEN
  195.               BEGIN
  196.                 IF ch=^C THEN
  197.                   UserData[1]:=1
  198.                 ELSE
  199.                 IF ch=^L THEN
  200.                   clrscr
  201.                 ELSE IF ch=^B THEN
  202.                   UserData[1]:=2
  203.                 ELSE IF ch=^[ THEN
  204.                   UserData[1]:=3
  205.                 ELSE
  206.                   BEGIN
  207.                     {$IFDEF b1200}
  208.                       delay(12);
  209.                     {$ENDIF}
  210.                     {$IFDEF b2400}
  211.                       delay(6);
  212.                     {$ENDIF}
  213.                     write(OldOutput,ch);
  214.                   END
  215.               END
  216.               ELSE BEGIN
  217.                 write(OldOutput,ch);
  218.                 {$IFDEF b1200}
  219.                   delay(12);
  220.                 {$ENDIF}
  221.                 {$IFDEF b2400}
  222.                   delay(6);
  223.                 {$ENDIF}
  224.               END;
  225.         END;
  226.         1 : BEGIN
  227.               DoColor(ch);
  228.               UserData[1]:=0;
  229.             END;
  230.         2 : IF ch<>^M THEN
  231.               CenterString := CenterString + ch
  232.             ELSE BEGIN
  233.               Center(CenterString);
  234.               UserData[1]:=0;
  235.               write(OldOutput,^M);
  236.               CenterString := '';
  237.             END;
  238.         3 : BEGIN
  239.               ESCString:=EscString+ch;
  240.               IF ch IN ['A'..'Z','a'..'z'] THEN
  241.               BEGIN
  242.                 UserData[1]:=0;
  243.                 IF ESCString='[K' THEN ClrEol
  244.                 ELSE IF ESCString='[2J' THEN ClrScr
  245.                 ELSE IF ESCString='[7m' THEN Color(0,7)
  246.                 ELSE IF ESCString='[87m' THEN Color(7,0)
  247.                 ELSE IF ESCString='[47m' THEN TextBackground(7)
  248.                 ELSE IF ESCString='[0;30m' THEN TextColor(0)
  249.                 ELSE IF ch='D' THEN
  250.                 BEGIN
  251.                   Delete(EscString,1,1);
  252.                   Delete(EscString,length(escstring),1);
  253.                   Val(escstring,x,y);
  254.                   gotoxy(wherex-x,wherey);
  255.                 END
  256.                 ELSE IF ch='H' THEN
  257.                 BEGIN
  258.                   p:=pos(';',EscString);
  259.                   Val(copy(EscString,p+1,length(EscString)-p-1),x,e);
  260.                   Val(copy(EscString,2,p-2),y,e);
  261.                   gotoxy(x,y);
  262.                 END;
  263.                 EscString:='';
  264.               END
  265.             END;
  266.       END;
  267.     END;
  268.     f.BufPos:=0;
  269.     TranslateOutput:=0;
  270. END;
  271.  
  272. {$F-}
  273.  
  274. BEGIN
  275.   IF Copy(GetEnv('BBS'),1,4)='WWIV' THEN Translate:=NONE
  276.   ELSE Translate:=DirectVideo;
  277.   TextRec(OldOutput) := TextRec(OutPut);
  278.   WITH TextRec(Output) DO
  279.   BEGIN
  280.     Mode:=fmOutput;
  281.     InOutFunc := @TranslateOutput;
  282.     FlushFunc := @TranslateOutput;
  283.     GetMem(BufPtr,128);
  284.     UserData[1]:=0;
  285.   END;
  286.   CenterString:='';
  287.   ESCString:='';
  288.   CheckSnow:=False;
  289. END.